WebuSocket + nginx_luajit_WebSocket + Disque(RC)の限界値


概要

時間単位でのメッセージ打ち込み量と負荷をメモまでに。

テストが存在するリポジトリはこれ。

https://github.com/sassembla/WebuSocket

ConnectionServerはMac内にたててある。



環境

MacBook Mid2015

CoreM 8GBなのでしょぼい。


クライアント: Unity Player

サーバ: Unity Editor

Unity 5.3.3p1



Disque、どんな時にCPU負荷が上がるか

serverから10,000 message / frame 以上の入力を受けた時。

messageは20byte程度。


どうも入力自体は一瞬で済むらしく、DisqueのCPU負荷が跳ね上がる。

WebSocket自体はちゃんとデータを送付できてるらしい。


100,000 message/ frame には耐えた。その際のDisqueの最大CPU使用率は65%ほど。

一瞬で9%くらいまで負荷が下がるのすげーな。



登り1,000 message/frame、下り10,000 message/frame 同時、できた

1クライアントに対してのupとdownを同時に行う試み。Disqueはこのへんに割と余裕で耐えた。


Disque 26%、 nginx 23% 。


サーバ側は同期的にメッセージぶち込んでいるんで、これを定期 + 別スレッドに変えてみよう。

より現実に即している。


ってわけでいろいろテストを書いてやってみた。


突破できた事象


1.サーバから1frameで10,000通のメッセージを投げてクライアントへと脱落なく届ける

Test_4_0_ReceiveManyTimes(),



2.サーバから1frameで100,000通のメッセージを投げてクライアントへと脱落なく届ける

new Test_4_1_ReceiveManyManyTimes(),



3.クライアントから1frameで1,000通のメッセージを投げてサーバ->クライアントへと脱落なく届ける

new Test_4_2_SendManyTimes(),



4.クライアントから1frameで10,000通のメッセージを投げてサーバ->クライアントへと脱落なく届ける

new Test_4_3_SendManyManyTimes(),



5.サーバから1frameで10,000通のメッセージを投げてクライアントへと脱落なく届ける

+ クライアントから1frameで1,000通のメッセージを投げてサーバへと脱落なく届ける

new Test_4_4_SendAndReceiveManyTimes(),



6.サーバから1frameで100,000通のメッセージを投げてクライアントへと脱落なく届ける

+ クライアントから1frameで10,000通のメッセージを投げてサーバへと脱落なく届ける

new Test_4_5_SendAndReceiveManyManyTimes(),



7.サーバから非同期で10,000通のメッセージを投げてクライアントへと脱落なく届ける

+ クライアントから非同期で10,000通のメッセージを投げてサーバへと脱落なく届ける

new Test_4_6_SendAndReceiveAsyncManyTimes(),



この間一切の切断、取りこぼし、メッセージの変質などが存在しない。



うーんいいね~~。あとは重たい箇所のあぶり出しとか最適化を必要になったらやろう。

時間を計るとかするかな、、フレーム数とかだと安定しそう。